﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using dacli.modelos.dao;

namespace dacli.vistas.pantallas
{
    public partial class Gestor : Form
    {
        private Conexion conexion;
        private modelos.Pedidos pedidos;
        private DataTable dataTablePedidos;
        private DataTable dataTableExamenes;
        int []TamaniosPedidos;
        int[] TamaniosExamenes;
        public Gestor()
        {
            InitializeComponent();
            conexion = new Conexion();
            dataTablePedidos = new DataTable();
            dataTableExamenes = new DataTable();
            grillaPedidos.ReadOnly = true;
            TamaniosPedidos = new int[] { 20, 30, 70, 200, 100 };
            TamaniosExamenes = new int[] { 0,600 };
            mostrarGrilla(grillaPedidos, getSqlPedidos(), TamaniosPedidos);
        }

        private void button1_Click(object sender, EventArgs e)
        {

        }

        private void Gestor_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'dacliDataSet.examenes_categoria' Puede moverla o quitarla según sea necesario.
            this.examenes_categoriaTableAdapter.Fill(this.dacliDataSet.examenes_categoria);
            
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void label6_Click(object sender, EventArgs e)
        {

        }
        private string getFiltroExamenes(long pedidoId)
        {
            string filtro = "WHERE pedido_detalle.pedidos_id =" + pedidoId + "";
            return filtro;
        }
        private string getFiltroPedidos()
        {
            var fecha = string.Format("{0:yyyyMMdd}", this.dateTimePicker1.Value);
            string filtro = "WHERE DATEDIFF(day, fecha, '"+ fecha +"')=0 ";
            if (txtNumPedido.Text != "")
            {
                int num = Convert.ToInt32(txtNumPedido.Text);
                filtro = " WHERE  pedidos.id = " + num;
            }
            
            return filtro;
        }

        string getSqlPedidos()
        {
            string sql = "SELECT numero_paciente_diario as Paciente, pedidos.id as Pedido, fecha as Fecha, clientes.nombres as Nombres "
                    + "FROM pedidos INNER JOIN clientes ON pedidos.paciente_id = clientes.id ";
            sql += this.getFiltroPedidos();
            return sql;
        }

        string getSqlExamenes(long  pedidoId)
        {
            string sql = "SELECT examenes.id, examenes.nombre as Examen "
                    + "FROM pedido_detalle INNER JOIN examenes ON pedido_detalle.examenes_id = examenes.id ";
            sql += this.getFiltroExamenes(pedidoId);
            return sql;
        }

        private void mostrarGrilla(DataGridView grilla, string sql,int[] Tamanio)
        {
            DataTable dataTable;
            if (grilla.Equals(grillaPedidos))
                dataTable = dataTableExamenes;
            else
                dataTable = dataTablePedidos; 
            BindingSource bindingSource;            
            dataTable.Clear();
            bindingSource = new BindingSource();
            SqlDataAdapter MyDA = conexion.consultarAdapter(sql);
            MyDA.Fill(dataTable);
            bindingSource.DataSource = dataTable;
            grilla.DataSource = bindingSource;
            for (int i = 0; i < grilla.Columns.Count; ++i) {
                    grilla.Columns[i].Width = Tamanio[i];

            }
        }
        string getSqlDatos(int pedidoId)
        {
            string sql = "SELECT pedidos.id, pedidos.numero_paciente_diario, clientes.nombres, clientes.edad, clientes.cedula " +
                         "FROM pedidos INNER JOIN clientes ON pedidos.paciente_id = clientes.id ";            
            return sql;
        }

        private void mostrarDatos(long pedidoId)
        {
            PedidosDAO pedidosDao = new PedidosDAO();
            modelos.Pedidos pedidos = pedidosDao.asignarId(pedidoId);
            textBox1.Text = pedidos.id + "/" + pedidos.pacienteDiario;
            textBox2.Text = pedidos.paciente.nombre;
            textBox5.Text = pedidos.paciente.cedula; 
            textBox6.Text = pedidos.paciente.calcularEdad() + " " + pedidos.paciente.tipo;

        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
        }

        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {
            mostrarGrilla(grillaPedidos, getSqlPedidos(), TamaniosPedidos);
        }

        private void grillaPedidos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int indice =  grillaPedidos.CurrentCell.RowIndex;
            if (indice < grillaPedidos.RowCount-1)
            {
                modelos.dao.PedidosDAO pedidosDao = new modelos.dao.PedidosDAO();
                int pedidoId = Convert.ToInt32(grillaPedidos[1, indice].Value.ToString());
                pedidos = pedidosDao.asignarId(pedidoId);
                mostrarGrilla(grillaExamenes, getSqlExamenes(pedidos.id), TamaniosExamenes);
                mostrarDatos(pedidos.id);
            }

        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            mostrarGrilla(grillaPedidos, getSqlPedidos(), TamaniosPedidos);
        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {
            txtNumPedido.Text = "";
        }

    
        private void elegir_examen(object sender, EventArgs e)
        {
            int indice = grillaExamenes.CurrentCell.RowIndex;
            int ExamenId = Convert.ToInt32(grillaExamenes[0, indice].Value.ToString());
            new Resultados(ExamenId,pedidos.id).ShowDialog();
        }

        private void grillaExamenes_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }
}
